Repository Public
1import type { Metadata } from "next";2import { AccessForm } from "@/components/access/AccessForm";3import { PageIntro } from "@/components/ui/Section";4import { site } from "@/lib/data";5import { getDict, type Locale } from "@/lib/i18n";6import { pageMetadata } from "@/lib/seo";78type Props = { params: Promise<{ locale: Locale }> };910export async function generateMetadata({ params }: Props): Promise<Metadata> {11 return pageMetadata((await params).locale, "access", "/access");12}1314export default async function AccessPage({ params }: Props) {15 const { locale } = await params;16 const a = getDict(locale).access;17 // Server-side delivery is enabled only when an SMTP provider is configured at build time.18 const mailEnabled = Boolean(process.env.SMTP_HOST && process.env.ACCESS_MAIL_TO);19 return (20 <>21 <PageIntro eyebrow={a.eyebrow} title={a.title} intro={a.lede} />22 <div className="shell grid gap-16 lg:grid-cols-12 lg:gap-12">23 <div className="lg:col-span-5">24 <section aria-labelledby="kinds-h">25 <h2 id="kinds-h" className="label">{a.kindsTitle}</h2>26 <ul className="mt-5 divide-y divide-line border-y border-line">27 {a.kinds.map((k) => (28 <li key={k.t} className="py-4">29 <p className="font-medium">{k.t}</p>30 <p className="mt-1 text-[0.9375rem] leading-relaxed text-body">{k.d}</p>31 </li>32 ))}33 </ul>34 </section>35 <section aria-labelledby="terms-h" className="mt-12">36 <h2 id="terms-h" className="label">{a.termsTitle}</h2>37 <ul className="mt-5 space-y-3 text-[0.9375rem] leading-relaxed text-body">38 {a.terms.map((x) => <li key={x.slice(0, 24)} className="flex gap-3"><span aria-hidden="true" className="mt-[0.7em] h-px w-3 shrink-0 bg-accent" />{x}</li>)}39 </ul>40 </section>41 <section aria-labelledby="contact-h" className="mt-12">42 <h2 id="contact-h" className="label">{a.contactTitle}</h2>43 <p className="mt-4 text-[0.9375rem] text-body">{a.contactBody}</p>44 <p className="mt-3"><a className="link text-xl tracking-[-0.01em]" href={`mailto:${site.contactEmail}`} data-testid="contact-email">{site.contactEmail}</a></p>45 </section>46 <section aria-labelledby="privacy-h" className="mt-12">47 <h2 id="privacy-h" className="label">{a.privacy.title}</h2>48 <p className="mt-4 text-[0.9375rem] leading-relaxed text-body">{a.privacy.body}</p>49 </section>50 </div>51 <section aria-labelledby="form-h" className="lg:col-span-7">52 <div className="card p-6 md:p-9">53 <h2 id="form-h" className="text-2xl font-medium tracking-[-0.02em]">{a.form.title}</h2>54 <div className="mt-6"><AccessForm locale={locale} mailEnabled={mailEnabled} to={site.contactEmail} /></div>55 </div>56 </section>57 </div>58 </>59 );60}61